package br.com.gestacard.sync.entidade;

import java.util.Date;

import javax.persistence.Column;
import javax.persistence.EnumType;
import javax.persistence.Enumerated;
import javax.persistence.FetchType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.MappedSuperclass;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;

import org.hibernate.annotations.ForeignKey;
import org.hibernate.validator.Email;

import com.powerlogic.jcompany.dominio.valida.PlcValCpf;

@MappedSuperclass
public abstract class Coordenador extends AppBaseEntity {

	
	private static final long serialVersionUID = 2400783875091039111L;

	@Id 
	@Column (name = "ID_COORDENADOR", nullable=false, length=5)
	private Long id;
	
	@Column (name = "ID_COORDENADOR",nullable=false, length=5, insertable=false, updatable = false)
	private Long codigo;
	
	@Column (name = "NOME", nullable=false, length=100)
	private String nome;
	
	@Column (name = "LOGRADOURO", nullable=false, length=100)
	private String  logradouro;
	
	@ManyToOne (targetEntity = TipoLogradouroEntity.class, fetch = FetchType.LAZY)
	@ForeignKey(name="FK_COORDENADOR_TIPOLOGRADOURO")
	@JoinColumn (name = "ID_TIPO_LOGRADOURO", nullable=false)
	private TipoLogradouro tipoLogradouro;
	
	@ManyToOne (targetEntity = MunicipioEntity.class, fetch = FetchType.LAZY)
	@ForeignKey(name="FK_COORDENADOR_MUNICIPIO")
	@JoinColumn (name = "ID_MUNICIPIO", nullable=false)
	private Municipio municipio;
	
	@Column (name = "COMPLEMENTO", nullable=true, length=50)
	private String complemento;
	
	@Column (name = "CEP", nullable=false, length=8)
	private String cep;
	
	@Column (name = "NUMERO", nullable=false, length=10)
	private String numero;
	
	@PlcValCpf
	@Column (name = "CPF", nullable=false, length=11)
	private String cpf;
	
	@Column (name = "TEL_FIXO", nullable=true, length=10)
	private String telFixo;
	
	@Column (name = "TEL_CELULAR", nullable=true, length=10)
	private String telCelular;
	
	@Enumerated(EnumType.STRING)
	@Column (name = "SEXO", nullable=false, length=1)
	private Sexo sexo = Sexo.M;

	@Enumerated(EnumType.STRING)
	@Column (name = "STATUS", nullable=false, length=1)
	private Status status = Status.A;
	
	@Email
	@Column (name = "E_MAIL", nullable=false, length=100)
	private String email;
	
	@Column (name = "DATA_NASCIMENTO", nullable=false, length=11)
	@Temporal(TemporalType.TIMESTAMP)
	private Date dataNascimento;
	
	@Column (name = "BAIRRO", nullable=false, length=100)
	private String bairro;

	public Long getId() {
		return id;
	}

	public void setId(Long id) {
		this.id=id;
	}

	public String getNome() {
		return nome;
	}

	public void setNome(String nome) {
		this.nome=nome;
	}


	public String getLogradouro() {
		return logradouro;
	}

	public void setLogradouro(String logradouro) {
		this.logradouro=logradouro;
	}

	public TipoLogradouro getTipoLogradouro() {
		return tipoLogradouro;
	}

	public void setTipoLogradouro(TipoLogradouro tipoLogradouro) {
		this.tipoLogradouro=tipoLogradouro;
	}

	public Municipio getMunicipio() {
		return municipio;
	}

	public void setMunicipio(Municipio municipio) {
		this.municipio=municipio;
	}

	public String getComplemento() {
		return complemento;
	}

	public void setComplemento(String complemento) {
		this.complemento=complemento;
	}

	public String getCep() {
		return cep;
	}

	public void setCep(String cep) {
		this.cep=cep;
	}

	public String getNumero() {
		return numero;
	}

	public void setNumero(String numero) {
		this.numero=numero;
	}
	public String getCpf() {
		return cpf;
	}

	public void setCpf(String cpf) {
		this.cpf=cpf;
	}

	public String getTelFixo() {
		return telFixo;
	}

	public void setTelFixo(String telFixo) {
		this.telFixo=telFixo;
	}

	public String getTelCelular() {
		return telCelular;
	}

	public void setTelCelular(String telCelular) {
		this.telCelular=telCelular;
	}

	public Long getCodigo() {
		return codigo;
	}

	public void setCodigo(Long codigo) {
		this.codigo = codigo;
	}

	public Sexo getSexo() {
		return sexo;
	}

	public void setSexo(Sexo sexo) {
		this.sexo = sexo;
	}

	public Status getStatus() {
		return status;
	}

	public void setStatus(Status status) {
		this.status = status;
	}

	public String getEmail() {
		return email;
	}

	public void setEmail(String email) {
		this.email = email;
	}

	public Date getDataNascimento() {
		return dataNascimento;
	}

	public void setDataNascimento(Date dataNascimento) {
		this.dataNascimento = dataNascimento;
	}

	public String getBairro() {
		return bairro;
	}

	public void setBairro(String bairro) {
		this.bairro = bairro;
	}

}
